package com.yuedou.api.util;

import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import okhttp3.Response;

import java.util.HashMap;
import java.util.Map;

/**
 * @创建者：zhouwei
 * @创建时间：2022/12/8
 * @描述：
 */
public class WmjUtil {

    public static void main(String[] args) {

    }
    /**
     *  1. 注册
     *  POST form-data
     *  设备只需注册一次，不需要重复注册。
     * @return
     */
    public static JSONObject reglock(String appId,String appSecret,String sn){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/reglock";
        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("sn",sn);
        try{
            Response resp =  OkHttpClientUtil.getInstance().postData(url,map);
            String responseData = resp.body().string();
            System.out.println("注册响应： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 1,
//                    "lock_type": 1,
//                    "lock_status": null,
//                    "state_msg": "注册成功"
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }
        return ret;
    }


    /**
     *  2. 开门
     * @return
     */
    public static JSONObject openDoor(String appId,String appSecret,String sn){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/oplock";

        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("sn",sn);
        try{
            Response resp =  OkHttpClientUtil.getInstance().postData(url,map);
            String responseData = resp.body().string();
            System.out.println("开门： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 1,
//                    "status_code": "1",
//                    "lock_type": "1",
//                    "lock_status": "1",
//                    "state_msg": "成功"
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }

        return ret;
    }

    /**
     * 3. 状态查询
     * @param appId
     * @param appSecret
     * @param sn
     * @return
     */
    public static JSONObject lockStatus(String appId,String appSecret,String sn){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/lockstatus";

        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("sn",sn);
        try{
            Response resp =  OkHttpClientUtil.getInstance().postData(url,map);
            String responseData = resp.body().string();
//            System.out.println("状态查询 响应： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 1,
//                    "state_msg": "获取成功",
//                    "online": 1,1表示设备在线，0表示设备离线
//                "ista": null,1表示检测到有人，0表示检测到无人，null为设备不支持该功能
//                "lockstatus": null,1表示门打开状态，0表示门关闭状态，null为设备不支持该功能
//                "opentime": null,门开打的时间
//                "closetime": null，门关闭的时间
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }

        return ret;
    }


    /**
     * 4. 开关（常通常断）设备控制接口
     * @param appId
     * @param appSecret
     * @param content   content {“sn”:”WMJ17100011”,”status”:2}
     * @return
     */
    public static JSONObject handle(String appId,String appSecret,String content){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/handle";

        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("content",content);
        try{
            Response resp =  OkHttpClientUtil.getInstance().postData(url,map);
            String responseData = resp.body().string();
            System.out.println("开关（常通常断）设备控制接口 响应： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 1,
//                    "state_msg": "获取成功",
//                    "online": 1,1表示设备在线，0表示设备离线
//                "ista": null,1表示检测到有人，0表示检测到无人，null为设备不支持该功能
//                "lockstatus": null,1表示门打开状态，0表示门关闭状态，null为设备不支持该功能
//                "opentime": null,门开打的时间
//                "closetime": null，门关闭的时间
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }

        return ret;
    }


    /**
     *  5. 添加IC卡
     * @param appId
     * @param appSecret
     * @param sn
     * @param cardSn  IC卡卡号
     * @param endtime  有效期，时间戳的文本
     * @return
     */
    public static JSONObject addCard(String appId,String appSecret,String sn, String cardSn, Long endtime){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/addcard";

        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("sn",sn);
        map.put("cardsn",cardSn);
        map.put("endtime",endtime);
        System.out.println(map.toString());
        try{
            Response resp =  OkHttpClientUtil.getInstance().postData(url,map);
            String responseData = resp.body().string();
            System.out.println("添加IC卡 响应： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 1,
//                    "state_msg": "获取成功",
//                    "online": 1,1表示设备在线，0表示设备离线
//                "ista": null,1表示检测到有人，0表示检测到无人，null为设备不支持该功能
//                "lockstatus": null,1表示门打开状态，0表示门关闭状态，null为设备不支持该功能
//                "opentime": null,门开打的时间
//                "closetime": null，门关闭的时间
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }

        return ret;
    }

    /**
     *  6. 读取IC卡
     * @return
     */
    public static JSONObject readCard(String appId,String appSecret,String sn){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/readCard";

        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("sn",sn);
        try{
            Response resp =  OkHttpClientUtil.getInstance().postData(url,map);
            String responseData = resp.body().string();
            System.out.println("读取IC卡 响应： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 1,
//                    "state_msg": "获取成功",
//                    "online": 1,1表示设备在线，0表示设备离线
//                "ista": null,1表示检测到有人，0表示检测到无人，null为设备不支持该功能
//                "lockstatus": null,1表示门打开状态，0表示门关闭状态，null为设备不支持该功能
//                "opentime": null,门开打的时间
//                "closetime": null，门关闭的时间
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }

        return ret;
    }



    /**
     *  7. 获取刷卡记录(按appid获取帐号下所有)
     * @return
     */
    public static JSONObject getCardLog(String appId,String appSecret,String sn){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/getcardlog";

        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("sn",sn);
        try{
            Response resp =  OkHttpClientUtil.getInstance().postData(url,map);
            String responseData = resp.body().string();
            System.out.println("获取刷卡记录(按appid获取帐号下所有) 响应： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 200,
//                    "state_msg": "获取成功",
//                    "data": [
//                {
//                    "id": "20467793",
//                        "locksn": "WMJ62593198",
//                        "cardsn": "8CEB180E",
//                        "dateline": "1605887198"
//                },
//                {
//                    "id": "20467806",
//                        "locksn": "WMJ62593198",
//                        "cardsn": "4CA3150F",
//                        "dateline": "1605887248"
//                }
//    ]
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }

        return ret;
    }

    /**
     * 8. 获取刷卡开门记录(按设备序列号)
     * @param appId
     * @param appSecret
     * @param sn
     * @param startTime   开始时间戳
     * @return
     */
    public static JSONObject getCardOpenLog(String appId,String appSecret,String sn,String startTime){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/getcardopenlog";

        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("sn",sn);
        map.put("starttime",startTime);

        try {
            Response resp = OkHttpClientUtil.getInstance().postData(url, map);
            String responseData = resp.body().string();
            System.out.println("获取刷卡开门记录(按设备序列号) 响应： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 200,
//                    "state_msg": "获取成功",
//                    "data": [
//                      {
//                          "id": "15578962",
//                        "cardsn": "109810CC",
//                        "dateline": "1597633752"
//                      },]
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }

        return ret;
    }


    /**
     * 9. 删除IC卡接口
     * @param appId
     * @param appSecret
     * @param sn
     * @param cardsn
     * @return
     */
    public static JSONObject delCard(String appId,String appSecret,String sn,String cardsn){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/delcard";

        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("sn",sn);
        map.put("cardsn",cardsn);
        try{
            Response resp =  OkHttpClientUtil.getInstance().postData(url,map);
            String responseData = resp.body().string();
            System.out.println("删除IC卡接口 响应： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 200,
//                    "state_msg": "删除成功"
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }

        return ret;
    }


    /**
     * 10. 推送二维码到显示屏（配置显示屏参数）
     * @param appId
     * @param appSecret
     * @param sn
     * @param qrCodeUrl   如: https://wxapp.wmj.com.cn/minilock?user_id=1&lock_id=166&st=
     * @return
     */
    public static JSONObject lcdConfig(String appId,String appSecret,String sn,String qrCodeUrl){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/lcdconfig";

        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("sn",sn);
        map.put("qrcodeurl",qrCodeUrl);
        try{
            Response resp =  OkHttpClientUtil.getInstance().postData(url,map);
            String responseData = resp.body().string();
            System.out.println("推送二维码到显示屏（配置显示屏参数） 响应： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 200,
//                    "state_msg": "配置成功"
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }

        return ret;
    }


    /**
     * 11. 回调地址配置及使能
     * @param appId
     * @param appSecret
     * @param sn
     * @param cburl   触发回调后post地址，如https://www.wmj.com.cn/cbapi/
     * @param cben    回调使能，1为打开，0为关闭
     * @param rcm     读卡功能选择，0为普通，2为读卡器模式
     *                使用说明：
     *              前提：cben参数配置为1时有效，配置为0时无效
     *              1.门状态变化接收控制器：doorstate，自定义开发接收门状态变化url应为cburl+doorstate，案例地址（https://www.wmj.com.cn/cbapi/doorstate）。
     *              doorstate接口post回参数如下：
     *              Content-Type = “application/x-www-form-urlencoded”
     *              sn,设备序列号
     *              state,0或1，0时状态线导通，1时状态线断开。
     * @return
     */
    public static JSONObject cbConfig(String appId,String appSecret,String sn,String cburl ,String cben ,String rcm){
        JSONObject ret = null;
        String url = "https://www.wmj.com.cn/api/cbconfig";

        Map<String,Object> map = new HashMap<>();
        map.put("appid",appId);
        map.put("appsecret",appSecret);
        map.put("sn",sn);
        try{
            Response resp =  OkHttpClientUtil.getInstance().postData(url,map);
            String responseData = resp.body().string();
            System.out.println("回调地址配置及使能 响应： " + responseData);
            ret = JSONUtil.parseObj(responseData);
//            {
//                "state": 1,
//                    "state_code": 201,
//                    "state_msg": "配置成功"
//            }
            return ret;
        }catch (Exception e){
            e.printStackTrace();
        }

        return ret;
    }
}
